GList *keyrings;
};
-static void _ostree_gpg_verifier_initable_iface_init (GInitableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (OstreeGpgVerifier, _ostree_gpg_verifier, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, _ostree_gpg_verifier_initable_iface_init))
+G_DEFINE_TYPE (OstreeGpgVerifier, _ostree_gpg_verifier, G_TYPE_OBJECT)
static void
ostree_gpg_verifier_finalize (GObject *object)
{
}
-static gboolean
-ostree_gpg_verifier_initable_init (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean ret = FALSE;
- OstreeGpgVerifier *self = (OstreeGpgVerifier*)initable;
- const char *default_keyring_path = g_getenv ("OSTREE_GPG_HOME");
- g_autoptr(GFile) default_keyring_dir = NULL;
-
- if (!default_keyring_path)
- default_keyring_path = DATADIR "/ostree/trusted.gpg.d/";
-
- if (g_file_test (default_keyring_path, G_FILE_TEST_IS_DIR))
- {
- default_keyring_dir = g_file_new_for_path (default_keyring_path);
- if (!_ostree_gpg_verifier_add_keyring_dir (self, default_keyring_dir,
- cancellable, error))
- {
- g_prefix_error (error, "Reading keyring directory '%s'",
- gs_file_get_path_cached (default_keyring_dir));
- goto out;
- }
- }
-
- ret = TRUE;
- out:
- return ret;
-}
-
-static void
-_ostree_gpg_verifier_initable_iface_init (GInitableIface *iface)
-{
- iface->init = ostree_gpg_verifier_initable_init;
-}
-
static void
verify_result_finalized_cb (gpointer data,
GObject *finalized_verify_result)
return ret;
}
+gboolean
+_ostree_gpg_verifier_add_global_keyring_dir (OstreeGpgVerifier *self,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const char *global_keyring_path = g_getenv ("OSTREE_GPG_HOME");
+ g_autoptr(GFile) global_keyring_dir = NULL;
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (OSTREE_IS_GPG_VERIFIER (self), FALSE);
+
+ if (global_keyring_path == NULL)
+ global_keyring_path = DATADIR "/ostree/trusted.gpg.d/";
+
+ if (g_file_test (global_keyring_path, G_FILE_TEST_IS_DIR))
+ {
+ global_keyring_dir = g_file_new_for_path (global_keyring_path);
+ if (!_ostree_gpg_verifier_add_keyring_dir (self, global_keyring_dir,
+ cancellable, error))
+ {
+ g_prefix_error (error, "Reading keyring directory '%s'",
+ gs_file_get_path_cached (global_keyring_dir));
+ goto out;
+ }
+ }
+
+ ret = TRUE;
+
+out:
+ return ret;
+}
+
OstreeGpgVerifier*
-_ostree_gpg_verifier_new (GCancellable *cancellable,
- GError **error)
+_ostree_gpg_verifier_new (void)
{
- return g_initable_new (OSTREE_TYPE_GPG_VERIFIER, cancellable, error, NULL);
+ return g_object_new (OSTREE_TYPE_GPG_VERIFIER, NULL);
}
GType _ostree_gpg_verifier_get_type (void);
-OstreeGpgVerifier *_ostree_gpg_verifier_new (GCancellable *cancellable,
- GError **error);
+OstreeGpgVerifier *_ostree_gpg_verifier_new (void);
OstreeGpgVerifyResult *_ostree_gpg_verifier_check_signature (OstreeGpgVerifier *self,
GBytes *signed_data,
GCancellable *cancellable,
GError **error);
+gboolean _ostree_gpg_verifier_add_global_keyring_dir (OstreeGpgVerifier *self,
+ GCancellable *cancellable,
+ GError **error);
+
void _ostree_gpg_verifier_add_keyring (OstreeGpgVerifier *self,
GFile *path);
GVariantIter iter;
GVariant *child;
g_autoptr (GBytes) signatures = NULL;
+ gboolean add_global_keyring_dir = TRUE;
- verifier = _ostree_gpg_verifier_new (cancellable, error);
- if (!verifier)
- goto out;
+ verifier = _ostree_gpg_verifier_new ();
if (remote_name == OSTREE_ALL_REMOTES)
{
}
else if (remote_name != NULL)
{
- /* Add the remote's keyring file. OstreeGpgVerifier
- * will ignore it if the keyring file does not exist. */
+ /* Add the remote's keyring file if it exists. */
OstreeRemote *remote;
g_autoptr(GFile) file = NULL;
file = g_file_get_child (self->repodir, remote->keyring);
- _ostree_gpg_verifier_add_keyring (verifier, file);
+ if (g_file_query_exists (file, cancellable))
+ {
+ _ostree_gpg_verifier_add_keyring (verifier, file);
+ add_global_keyring_dir = FALSE;
+ }
ost_remote_unref (remote);
}
+ if (add_global_keyring_dir)
+ {
+ /* Use the deprecated global keyring directory. */
+ if (!_ostree_gpg_verifier_add_global_keyring_dir (verifier, cancellable, error))
+ goto out;
+ }
+
if (keyringdir)
{
if (!_ostree_gpg_verifier_add_keyring_dir (verifier, keyringdir,